package com.taobao.demo.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.taobao.demo.user.dto.PasswordDTO;
import com.taobao.demo.user.dto.UserInfoDTO;
import com.taobao.demo.user.dto.UserLoginDTO;
import com.taobao.demo.user.dto.UserRegisterDTO;
import com.taobao.demo.user.entity.LoginLog;
import com.taobao.demo.user.entity.User;
import com.taobao.demo.user.entity.UserBehavior;

import java.util.List;


/**
 * @author 83776
 */
public interface IUserService  extends IService<User> {
    boolean register(UserRegisterDTO registerDTO);

    /** 用户登录，返回 JWT 令牌 */
    String login(UserLoginDTO loginDTO, String loginIp);

    /** 根据用户名查询用户 */
    User getByUsername(String username);

    /** 获取用户信息（登录后） */
    UserInfoDTO getUserInfo(Long userId);

    /** 修改用户信息 */
    boolean updateUserInfo(Long userId, UserInfoDTO infoDTO);


    void recordLoginLog(LoginLog loginLog); // 新增：记录登录日志

    boolean existsById(Long userId);  // 补充：简化版查询，仅返回存在性

    // ====================== 用户行为记录功能（新增） ======================
    /**
     * 记录用户行为（点击商品）
     * @param userId 用户ID
     * @param goodsId 商品ID
     */
    void recordClickBehavior(Long userId, Long goodsId);

    /**
     * 记录用户行为（收藏商品）
     * @param userId 用户ID
     * @param goodsId 商品ID
     * @return 收藏结果（true：收藏成功；false：已收藏过）
     */
    boolean recordFavoriteBehavior(Long userId, Long goodsId);

    /**
     * 取消用户收藏商品
     * @param userId 用户ID
     * @param goodsId 商品ID
     * @return 取消结果（true：取消成功；false：未收藏过）
     */
    boolean cancelFavoriteBehavior(Long userId, Long goodsId);

    /**
     * 查询用户的行为记录（供推荐服务分析偏好）
     * @param userId 用户ID
     * @return 行为列表（按时间倒序）
     */
    List<UserBehavior> getUserBehaviors(Long userId);

    boolean updateUserRole(Long userId,String newRole);

    /**
     * 修改个人密码（需验证旧密码）
     */
    boolean changePassword(Long userId, PasswordDTO passwordDTO);

    /**
     * 管理员创建商家账号（仅ADMIN/SUPER_ADMIN可调用）
     */
    boolean createMerchant(UserRegisterDTO registerDTO);
}
